package co.edu.uniandes.services;

import java.rmi.Naming;

import co.edu.uniandes.dto.Ciudad;
import co.edu.uniandes.dto.Evento;
import co.edu.uniandes.dto.Pais;
import co.edu.uniandes.dto.TipoEvento;
import co.edu.uniandes.dto.Usuario;

/**
 * Servidor para el ejemplo de RMI.
 * @author Rafael Guillermo Blanco Banquez <rafaelg.blancob@gmail.com>
 *
 */
public class PublicaServidorRMI {

	public PublicaServidorRMI() {
		
		System.out.println("Iniciando Servicios RMI");
		// Se indica a rmiregistry dónde están las clases.
		// Cambiar el paht al sitio en el que esté. Es importante
		// mantener la barra al final.
		System.setProperty("java.rmi.server.codebase","file:/home/raflanco/workspace/TravelSoftClienteServicio/bin/");
			
        // Se publica el objeto remoto para cada uno de los Servicios
       
		//System.setSecurityManager(new RMISecurityManager());
		
		try{
			System.out.print("Registrando RMI Remote: ObjetoRemotoCiudad :");
			IServices<Ciudad, Integer> objetoRemotoCiudad = new ServicioCiudad();
	        Naming.rebind (IServicioCiudad.NAME_RMI_INVOKE, objetoRemotoCiudad);
	        System.err.println(" OK");
        
	        try {
				//ESPERAMOS 2 SEGUNDOS MIENTRAS SE EJECUTA EL SERVICIO (CONSTRUCTOR)            
	        	Thread.sleep(2000L);
			} catch (Exception e) {
				System.err.println("Se termino el tiempo de expera inexperadamente: "+e.getMessage());
			}
		}
        catch (Exception e)
        {
        	System.err.println(" FALLO ");
        }
        
		try{
	        System.out.print("Registrando RMI Remote: ObjetoRemotoEvento :");
	        IServices<Evento, Integer> objetoRemotoEvento = new ServicioEvento();
	        Naming.rebind (IServicioEvento.NAME_RMI_INVOKE, objetoRemotoEvento);
	        System.err.println(" OK");
	        
	        try {
				//ESPERAMOS 2 SEGUNDOS MIENTRAS SE EJECUTA EL SERVICIO (CONSTRUCTOR)            
	        	Thread.sleep(2000L);
			} catch (Exception e) {
				System.err.println("Se termino el tiempo de expera inexperadamente: "+e.getMessage());
			}
		}
	    catch (Exception e)
	    {
	    	System.err.println(" FALLO ");
	    }
        
        try{
	        System.out.print("Registrando RMI Remote: ObjetoRemotoPais :");
	        IServices<Pais, Integer> objetoRemotoPais = new ServicioPais();
	        Naming.rebind (IServicioPais.NAME_RMI_INVOKE, objetoRemotoPais);
	        System.err.println(" OK");
	        
	        try {
				//ESPERAMOS 2 SEGUNDOS MIENTRAS SE EJECUTA EL SERVICIO (CONSTRUCTOR)            
	        	Thread.sleep(2000L);
			} catch (Exception e) {
				System.err.println("Se termino el tiempo de expera inexperadamente: "+e.getMessage());
			}
		}
	    catch (Exception e)
	    {
	    	System.err.println(" FALLO ");
	    }
        
        try{
	        System.out.print("Registrando RMI Remote: ObjetoRemotoUsuario :");
	        IServices<Usuario, Integer> objetoUsuarioUsuario = new ServicioUsuario();
	        Naming.rebind (IServicioUsuario.NAME_RMI_INVOKE, objetoUsuarioUsuario);
	        System.err.println(" OK");
	        
	        try {
				//ESPERAMOS 2 SEGUNDOS MIENTRAS SE EJECUTA EL SERVICIO (CONSTRUCTOR)            
	        	Thread.sleep(2000L);
			} catch (Exception e) {
				System.err.println("Se termino el tiempo de expera inexperadamente: "+e.getMessage());
			}
		}
	    catch (Exception e)
	    {
	    	System.err.println(" FALLO ");
	    }
        
        try{
	        System.out.print("Registrando RMI Remote: ObjetoRemotoTipoEvento :");
	        IServices<TipoEvento, Integer> objetoTipoEvento = new ServicioTipoEvento();
	        Naming.rebind (IServicioTipoEvento.NAME_RMI_INVOKE, objetoTipoEvento);
	        System.err.println(" OK");
	        
	        try {
				//ESPERAMOS 2 SEGUNDOS MIENTRAS SE EJECUTA EL SERVICIO (CONSTRUCTOR)            
	        	Thread.sleep(2000L);
			} catch (Exception e) {
				System.err.println("Se termino el tiempo de expera inexperadamente: "+e.getMessage());
			}
		}
	    catch (Exception e)
	    {
	    	System.err.println(" FALLO ");
	    }
        
        System.out.println("Servicios registrados correctamente ..");
        System.out.println("NO FINALIZE ESTA VENTANA, SI LO HACE LOS SERVICIOS YA NO ESTARÁN ACTIVOS ..");
        
		
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		new PublicaServidorRMI();

	}

}
